perm filename PT2.F4[MSS,LCS]3 blob
sn#187353 filedate 1975-11-20 generic text, type T, neo UTF8
00010 SUBROUTINE PT2
00020 INTEGER VALID
00080 DIMENSION VALID(6),NBAR(36)
00100 DATA QLINE/140.0/,HX/2./,VALID/1,4,8,2,3,-2/
00200 C QLINE=BASIC LINE LENGTH, HX=HEIGHT MULTIPLIER, ZL=LN. LNGTH FACTOR.
00300
00375 C ADD MORE TO VALID LATER *****
00400 COMMON /SF/KL,RT,KP,STFSZ,NAMX
00500 COMMON RS,JA,CLEFQ,AA,RQ(16),KQ,NQ,JQ,JJQ,KBQ,NAQ
00600 COMMON/STF/RSTFAC(-3/4),RSTJ2 /IVV/IV(200)
00700 COMMON /POSI/STFF(-3/4),JJ2,JPQ /LLL/L,LL,I,RXQ
00800 1/PX/KPN(1) /Q/Q(1) /PTR/KWDS(1) /XRN/RN(1)
00900 EQUIVALENCE (RQ(2),R4),(R5,RQ(3)),(R6,RQ(4)),(R7,RQ(5))
01000 1,(R8,RQ(6)),(R9,RQ(7)),(LCNT,IV(80)),(NDPY,IV(81))
01205 C TRNSP'S Bb, F, BBb, A, G, Eb.
01300 103 FORMAT(' TYPE OUTPUT FILE NAME ',$)
01400 102 FORMAT(A5)
01500 TYPE 103
01600 ACCEPT 102,NAMX
01610 IF(NAMX.EQ.' ')NAMX='AAAAA'
01650 CC IF(NAMX.EQ.' ')GO TO 102
01700 IF(LOOKF(NAMX).GE.0)GO TO 88
01800 TYPE 88,NAMX
01900 ACCEPT 102,L
02000 IF(L.EQ.'N')GO TO 103
02100 88 FORMAT(' WRITE OVER FILE ',A5,'???? '$)
02200 5 FORMAT(F,2I)
02210 IF(RS.NE.'OLD')GO TO 2000
02220 CALL GETFIL('PARTS')
02240 CALL FASTIN(RSTFAC,128)
02250 CALL FASTIN(KPN,JJ2)
02260 CALL FASTIN(Q,JPQ)
02300 CC READ(1),L,LL,
02400 CC 1(PN(N),N=1,L+1),(Q(N),N=1,LL-1),J,RSTJ2,J,J,RSTFAC,STFF,IV,STFF
02410 2000 TYPE 144
02440 144 FORMAT(' STAFF SIZE, TRANSP. '$)
02470 ACCEPT 5,RSTJ2,LL
02472 IF(MOD(LL,7).EQ.0)GO TO 140
02475 DO 40 L=1,6
02480 40 IF(LL.EQ.VALID(L))GO TO 140
02485 TYPE 240
02490 GO TO 2000
02495 240 FORMAT(' THIS TRANSP NOT OFFERED')
02500 140 IF(RSTJ2.EQ.0)RSTJ2=.9
02510 L=JJ2-2
02515 TR=LL
02520 IF(LL.NE.0)CALL TRNSP(L,TR)
02600 I=L
02700 KK=1
02800 CC JJ=0
02900 CC DO 7 K=1,L
03000 CC N=PN(K)
03100 CC IF(Q(N+1).NE.4)GO TO 7
03200 CC JJ=JJ+1
03300 C FOUND A BAR LINE
03400 CC RN(JJ)=Q(N+3)
03500 CC7 CONTINUE
03600 CC ENDLN=RN(JJ)
03650 ENDLN=ENDL(JJ)
03675 C FUNCTION ENDL(JJ) (IN FAIL) DOES ALL ABOVE
03700
03710 NA=1000
03750 N=0
03820 TYPE 90,JJ
03840 RA=0
03860 90 FORMAT(' NUMBER OF BARS PER LINE: TOTAL BAR LINES='I3/)
03870 ZLINE=QLINE
03900 9 KL=0
04000 XLINE=ZLINE
04100 J=0
04150 LL=0
04200 DO 8 K=1,JJ
04300 IF(RN(K).LT.XLINE)GO TO 8
04400 KP=K-KL
04500 C NUMBER OF BARS, THIS LINE
04600 CC TYPE 89,KP
04700 KL=K
04800 J=J+1
04810 IF(IV(J).NE.KP)LL=-1
04820 IV(J)=KP
04900 XLINE=RN(K)+ZLINE
05000 IF(ENDLN-XLINE.LT.80.)XLINE=ENDLN
05100 8 CONTINUE
05110 IF(LL)TYPE 108,RA,(IV(K),K=1,J)
05115 IF(RT)GO TO 105
05120 108 FORMAT(F6.2,8(3I3,1X))
05150 CC TYPE 108
05160 CC108 FORMAT(/)
05200 CC89 FORMAT('+',I3,$)
05205 IF(J.GT.NA)GO TO 107
05210 IF(N.EQ.0)GO TO 105
05220 C SKIP IF FIRST TIME
05230 IF(N.NE.KP)GO TO 106
05235 IF(J.EQ.NA)GO TO 105
05240 106 RT=.05
05260 C SHRINK OR EXPAND?
05270 RA=RA+RT
05280 ZLINE=QLINE*RS/RA
05285 CC IF(RA.GT.J)GO TO 107
05290 GO TO 9
05300 107 FORMAT(' CAN''T DO IT!')
05310 TYPE 107
05400 105 TYPE 104,J
05500 104 FORMAT(I4,' LINES - OR TYPE N1, N2 --'$)
05550 KA=0
05600 ACCEPT 5,RA,N,KL
05650 C TYPE 0,n TO EXIT WITH n SPACING BETWEEN STAVES (2 IS DEFAULT)
05660 IF(KL.NE.0)GO TO 110
05680 C FOR SPECIFICATION OF HOW MANY BARS ON EACH LINE
05700 IF(RA.EQ.0)GO TO 11
05800 IF(ZLINE.EQ.QLINE)RS=J
05820 NA=RA
05825 RT=NA-RA
05827 IF(RT)GO TO 109
05830 RA=RA-.6
05840 C CHECK THIS ↑↑↑ NUMBER!
05850 IF(N.EQ.0)GO TO 90
05900 109 ZLINE=QLINE*RS/RA
05910 GO TO 9
05920
05925 111 FORMAT(36I)
05930 110 REREAD 111,NBAR
05940 DO 112 K=36,1,-1
05945 KP=NBAR(K)
05950 KA=KA+KP
05960 112 IF(KP.EQ.0)KL=K
05970 IF(KA.NE.JJ)GO TO 107
05980 C MISMATCH!
05990 N=26-2*MOD(KL-1,12)
06000 IF(N.EQ.26)N=0
06100
06200 11 RA=0
06250 XLINE=ZLINE
06300 CLEF=-99
06400 JSLUR=0
06500 SIG=CLEF
06510 HX=2
06520 SP=2.45
06530 IF(N.EQ.0)GO TO 100
06540 HX=N
06550 SP=SP+(HX-2.)*.11
06560 LC=1
06600 100 KL=1
06700 KP=1
06800 RT=2
06900 J=KK
07000 HGT=HX*2.
07020 LB=0
07100
07200 DO 1 K=KK,I
07300 N=KPN(K)
07400 IF(Q(N+1).NE.4)GO TO 1
07410 IF(KA.EQ.0)GO TO 334
07420 LB=LB+1
07430 IF(NBAR(LC).GT.LB)GO TO 1
07440 C FOR SPECIFIED BARS
07450 LC=LC+1
07460 LB=0
07470 GO TO 335
07600 334 IF(Q(N+3).LT.XLINE)GO TO 1
07700 C FOUND LAST BAR LINE.
07710 335 RX=0
07720 MTR1=-1
07730 MTR2=-1
07740 LL=KPN(K+1)
07745 C TO ADD METER AT END OF BAR
07747 RS=Q(LL+1)
07748 IF(RS.LE.4)GO TO 3
07750 IF(RS.EQ.18)MTR1=LL
07755 C WHAT ABOUT REHRSL NUMS, ETC??
07770 LL=KPN(K+2)
07771 RS=Q(LL+1)
07775 IF(RS.LE.4)GO TO 3
07780 IF(RS.EQ.18)MTR2=LL
07790 LL=KPN(K+3)
07800 IF(Q(LL+1).EQ.18)MTR2=LL
07850 IF(MTR1.GT.0)GO TO 3
07862 MTR1=MTR2
07868 MTR2=-1
07875 C IN CASE IT SAW SOMETHING AHEAD OF NEW METER
07900 3 JJ=KP
08000 C PUTS IN STAFF
08100 RS=3.
08200 IF(RT.NE.0)GO TO 331
08300 C NEXT FOR BOTTOM STAFF. PUTS IN SPACER.
08400 RS=6.
08500 CC R8=SP
08600 331 CALL STAFF(RS,8.,0,HGT,RSTJ2,0,0,SP)
08700 HGT=HGT-HX
08800 IF(XLINE.EQ.ZLINE)GO TO 33
08900 CC IF(XLINE.LT.ENDLN)GO TO 6
08905 IF(K.NE.I)GO TO 6
08910 IF(RT.EQ.0)GO TO 6
09000 RX=RT
09100 RT=0
09200 CALL STAFF(6.,8.,0,0,0,0,1.,SP)
09300 C PUTS IN SPACER
09400 RT=RX
09500 6 IF(JSLUR.EQ.0)GO TO 2333
09510 LL=JSLUR
09520 JSLUR=0
09600 1333 CALL STAFF(5.,5.,0,Q(LL),Q(LL+1),11.5,Q(LL+3),0)
09700 2333 IF(JSL2.EQ.0)GO TO 333
09710 LL=JSL2
09715 C FOR 2ND SLUR AT END OF LINE.
09720 JSL2=0
09730 GO TO 1333
09800 333 IF(CLEF.EQ.-99)GO TO 33
09900 C ONLY STAFF FOR FIRST LINE AT TOP.
10000 RX=10.*RSTJ2
10100 C THE SPACER
10200 CALL STAFF(3.,3.,1.,0,CLEF,0,0,0)
10300 IF(SIG.EQ.-99)GO TO 33
10400 RS=4.
10500 R5=SIG
10600 RX=CLEF
10700 IF(R5.LT.50)GO TO 332
10800 RX=IFIX((R5+50.)/100.)
10900 R5=R5-RX*100.
11100 C CLEF+SIG
11200 332 CALL STAFF(RS,17.,11.0*RSTJ2,0,R5,RX,0,0)
11300 RX=12.*RSTJ2
11400
11500 33 R4=RA
11600 R5=Q(N+3)
11700 RS=0
11800 R7=RT
11900 R8=RX
12000 R9=200.
12100 LL=0
12200 L=K-J+1
12300 CALL PTMOVE(Q,KPN(J))
12400 RA=R5
12510 31 IF(MTR1)GO TO 231
12515 R=200.0+2.23*RSTJ2
12520 CALL STAFF(Q(MTR1),Q(MTR1+1),R,0,Q(MTR1+5),Q(MTR1+6),0,0)
12540 C PUTS METER AFTER END OF STAFF
12555 IF(MTR2)GO TO 231
12565 R=200.0+6.7*RSTJ2
12567 CALL STAFF(Q(MTR2),Q(MTR2+1),R,0,Q(MTR2+5),Q(MTR2+6),0,0)
12585 C PUTS METER AFTER END OF STAFF
12590 231 KB=KL
12600 131 DO 30 NA=KK,K
12700 KWDS(KP)=KB
12800 KP=KP+1
12900 JK=KPN(NA)
13000 R=Q(JK+1)
13100 IF(R.EQ.5)GO TO 135
13150 IF(R.NE.44)GO TO 35
13200 135 IF(Q(JK+6).LT.199.)GO TO 37
13300 C CATCHES END OF SLUR AND VARIOUS LINES
13500 IF(R.EQ.5)GO TO 235
13600 C TO PUT SLUR ON NEXT LINE.
13620 535 Q(JK+6)=201.
13700 IF(R.EQ.5)GO TO 30
13750 GO TO 38
13760 235 IF(JSLUR.NE.0)GO TO 435
13770 JSLUR=JK+4
13780 GO TO 535
13790 435 JSL2=JK+4
13792 C FOR 2ND SLUR
13795 GO TO 535
13797
13800 35 IF(R.NE.2)GO TO 36
13900 IF(Q(JK).LT.6.)GO TO 30
14000 CC RR=Q(IFIX(PN(NA-1))+3)
14100 RR=RIGHT(NA,-1)
14200 IF(RR.GE.199.)RR=RX
14300 CC Q(JK+3)=RR-1.6*RSTJ2+(Q(IFIX(PN(NA+1))+3)-RR)/2.
14400 Q(JK+3)=RR-1.6*RSTJ2+(RIGHT(NA,1)-RR)/2.
14500 C FUNCTION 'RIGHT' FINDS RIGHT ITEMS FOR CENTERING.
14600 C CENTERS WHOLE REST
14700 GO TO 30
14800 36 IF(R.NE.3)GO TO 34
14900 RR=Q(JK+5)
15000 IF(Q(JK).LT.3)RR=0
15100 CLEF=RR
15200 GO TO 30
15300 34 IF(R.NE.17)GO TO 37
15400 SIG=Q(JK+5)
15500 IF(Q(JK).GT.3)SIG=SIG+Q(JK+6)*100.
15600 C CLEF # IN P6 WITH KEY SIGS.
15700 C NEXT CHANGES CODE NUM BACK TO ORIGINAL
15800 37 IF(R.LT.33)GO TO 30
15850 38 Q(JK+1)=R/11.
15900 30 KB=KPN(NA+1)-KPN(NA)+KB
16000
16100 CC DO 31 NA=IFIX(PN(KK)),IFIX(PN(K+1)-1.)
16200 CC RN(KL)=Q(NA)
16300 CC31 KL=KL+1
16400 CC KK=K+1
16410 CALL PSHFT(KK,K)
16500 RS=RT
16600 LL='J'
16700 R4=0
16800 R5=200
16900 NA=L
17000 L=KP-JJ
17100 CALL PTMOVE(RN,KWDS(JJ))
17200 IF(K.EQ.I)GO TO 2
17300 L=NA
17400 J=K+1
17500 C SO IT DOESN'T GO THRU ALL DATA
17600 RT=RT-1
17700 XLINE=RA+ZLINE
17800 IF(ENDLN-XLINE.LT.80.)XLINE=ENDLN
17900 10 IF(KL.GT.1700.OR.KP.GT.190.OR.RT)GO TO 2
18000 1 IF(K.EQ.I)GO TO 3
18100 CC2 L=KP
18200 CC KWDS(KP+1)=KB
18250 2 KWDS(KP)=KB
18300 J=1
18400 CC CALL OFILE(1,NAMX)
18500 CC LL=KWDS(L+1)
18510 JJ2=KP+1
18548 JPQ=KB
18567 C WRITES 1 EXTRA WORD
18600 CC2929 WRITE(1),L,LL,
18700 CC 1(KWDS(N),N=1,L+1),(RN(N),N=1,LL-1),J,J,J,J,RSTFAC,STFF,
18750 CC 1 (Q(N),N=1,78),STFF
18760 CALL PUTFIL(NAMX)
18769 LCNT=0
18773 NDPY=0
18778 CALL FASTOU(RSTFAC,128)
18784 CALL FASTOU(KWDS,JJ2)
18790 CALL FASTOU(RN,JPQ)
18800 TYPE 101,NAMX
18900 101 FORMAT(1XA5)
19000 IF(KK.GE.I)CALL EXIT
19100 NAMX=NAMX+2
19200 CALL FINFIL
19300 GO TO 100
19400 END
19500
19600 CC SUBROUTINE STAFF(P0,P1, P3,P4,P5,P6,P7,P8)
19700 CC COMMON/XRN/RN(2000) /SF/KL,RT,KP,RSTJ2,NAMX
19800 CC COMMON /PTR/PWDS(250),L,LL,I,IX
19900 CC PWDS(KP)=KL
20000 CC KP=KP+1
20100 CC RN(KL)=P0
20200 CC RN(KL+1)=P1
20300 CC RN(KL+2)=RT
20400 CC RN(KL+3)=P3
20500 CC RN(KL+4)=P4
20600 CC RN(KL+5)=P5
20700 CC IF(P0.LT.4.)GO TO 1
20800 CC RN(KL+6)=P6
20900 CC IF(P0.LT.5)GO TO 1
21000 CC RN(KL+7)=P7
21100 CC IF(P0.LT.6)GO TO 1
21200 CC RN(KL+8)=P8
21300 CC1 KL=KL+P0+3.
21400 CC END
21500
21600 CC FUNCTION RIGHT(NA,J)
21700 CC COMMON /PX/PN(1800) /Q/Q(9000)
21800 CC K=NA+J
21900 C J IS EITHER +1 OR -1
22000 CC1 L=PN(K)
22100 CC IF(Q(L+1).NE.16)GO TO 2
22200 CC K=K+J
22300 CC GO TO 1
22400 CC2 RIGHT=Q(L+3)
22500 CC END